/**
 * 
 */
package facade;

import factory.*;
import metier.*;
import metier.JDBC.AnneeEtudeJDBC;
import metier.JDBC.EnseignantJDBC;
import metier.JDBC.SeanceJDBC;
import metier.JDBC.UEJDBC;


import java.util.ArrayList;
import java.util.Date;

/**
 * @author Quipu-Team
 *
 */
public class FacadePersonne {

    // ATTRIBUTS
    private Factory factory = null;
    private Enseignant enseignant = null;
    private StatutEnseignant statutEnseignant = null;
    private StatutEnseignant choixStatutEns = null;
    private Groupe groupe = null;
    private Incompatibilite incompatibilite = null;

    public Incompatibilite getIncompatibilite() {
        return incompatibilite;
    }

    public void setIncompatibilite(Incompatibilite incompatibilite) {
        this.incompatibilite = incompatibilite;
    }

    // CONSTRUCTEUR
    public FacadePersonne() {
        factory = new FactoryJDBC();
    }

    public void creerEnseignant(String nom, String prenom, StatutEnseignant statut) {
        this.enseignant = factory.creerEnseignant(nom, prenom, statut);
    }

    public void creerStatutEnseignant(String nom, int nbHeure) {
        this.statutEnseignant = factory.creerStatutEnseignant(nom, nbHeure);
    }

    public void creerGroupe(String nom, int nombreEtudiants, Semestre semestre) {
        groupe = (factory.creerGroupe(nom, nombreEtudiants, semestre));
    }

    public void creerGroupe() throws ExceptionMetier {
        groupe = factory.creerGroupe();
    }

    public void creerChoixStatutEns(String nom, int nbHeure) {
        this.choixStatutEns = factory.creerStatutEnseignant(nom, nbHeure);
    }
    // ACCESSEURS

    /**
     * @return the factory
     */
    public Factory getFactory() {
        return factory;
    }

    /**
     * @return the enseignant
     */
    public Enseignant getEnseignant() {
        return enseignant;
    }

    /**
     * @return the statutEnseignant
     */
    public StatutEnseignant getStatutEnseignant() {
        return statutEnseignant;
    }

    /**
     * @return the choixStatutEns
     */
    public StatutEnseignant getChoixStatutEns() {
        return choixStatutEns;
    }

    /**
     * @param choixStatutEns the choixStatutEns to set
     */
    public void setChoixStatutEns(StatutEnseignant choixStatutEns) {
        this.choixStatutEns = choixStatutEns;
    }

    // METHODES
    /**
     * @param nom
     * @param prenom
     * @param statut
     * @throws ExceptionMetier
     */
    public void ajouterEnseignant() throws ExceptionMetier {
        this.enseignant.insert();
    }

    /**
     * @param nom
     * @param nbHeure
     * @throws ExceptionMetier
     */
    public void ajouterStatutEnseignant() throws ExceptionMetier {
        this.statutEnseignant.insert();
    }

    /**
     * @param nom
     * @param prenom
     * @param statut
     * @throws ExceptionMetier
     */
    public void modifierEnseignant(String nom, String prenom, StatutEnseignant statut) throws ExceptionMetier {
        this.enseignant.setNom(nom);
        this.enseignant.setPrenom(prenom);
        this.enseignant.setStatut(statut);
        this.enseignant.update();
    }

    /**
     * @param nom
     * @param nbHeure
     * @throws ExceptionMetier
     */
    public void modifierStatutEnseignant(String nom, int nbHeure) throws ExceptionMetier {
        this.statutEnseignant.setNom(nom);
        this.statutEnseignant.setNbHeure(nbHeure);
        this.statutEnseignant.update();
    }

    public void supprimerEnseignant() throws ExceptionMetier {
        this.enseignant.delete();
    }

    public void supprimerStatutEnseignant() throws ExceptionMetier {
        this.statutEnseignant.delete();
    }

    public ArrayList<ElementListe> creerListeEnseignant() throws ExceptionMetier {
        return factory.creerListeEnseignant();
    }

    public ArrayList<ElementListe> creerListeStatutEnseignant() {
        return factory.creerListeStatutEnseignant();
    }

    public ArrayList<ElementListe> creerListeGroupe() throws ExceptionMetier {
        return factory.creerListeGroupe();
    }

    public ArrayList<ElementListe> creerListeGroupeSemestre(int idSemestre) throws ExceptionMetier {
        return factory.creerListeGroupeSemestre(idSemestre);
    }

    /**
     * @param dateDebut
     * @param dateFin
     * @param listeEns
     * @param anneeEtude
     * @return Liste des seances de cours associ� � ces param�tres
     */
    public ArrayList<SeanceJDBC> recupererListeSeancesEns(Date dateDebut, Date dateFin, ArrayList<EnseignantJDBC> listeEns, AnneeEtudeJDBC anneeEtude) {
        return null;
    }

    /**
     * @param dateDebut
     * @param dateFin
     * @param anneeEtude
     * @return Liste des seances de cours associ� � ces param�tres
     */
    public ArrayList<SeanceJDBC> recupererListeSeances(Date dateDebut, Date dateFin, AnneeEtudeJDBC anneeEtude) {
        return null;
    }

    /**
     * @param dateDebut
     * @param dateFin
     * @param listeUE
     * @param anneeEtude
     * @return Liste des seances de cours associ� � ces param�tres
     */
    public ArrayList<SeanceJDBC> recupererListeSeancesUE(Date dateDebut, Date dateFin, ArrayList<UEJDBC> listeUE, AnneeEtudeJDBC anneeEtude) {
        return null;
    }

    /**
     * @param dateDebut
     * @param dateFin
     * @param listeEns
     * @param listeUE
     * @param anneeEtude
     * @return Liste des seances de cours associ� � ces param�tres
     */
    public ArrayList<SeanceJDBC> recupererListeSeances(Date dateDebut, Date dateFin, ArrayList<EnseignantJDBC> listeEns, ArrayList<UEJDBC> listeUE, AnneeEtudeJDBC anneeEtude) {
        return null;
    }

    public Groupe getGroupe() {
        return groupe;
    }

    public void ajouterGroupe() throws ExceptionMetier {
        if (groupe != null) {
            groupe.insert();
        }
    }

    public void modifierGroupe(String nom, int nbe, Semestre sem) throws ExceptionMetier {
        if (getGroupe() != null) {
            getGroupe().setNom(nom);
            getGroupe().setNombreEtudiants(nbe);
            getGroupe().setSemestre(sem);
            getGroupe().update();
        }
    }

    public void supprimerGroupe() throws ExceptionMetier {
        if (getGroupe() != null) {
            getGroupe().delete();
        }
    }

    public void creerIncompatibilite() throws ExceptionMetier {
        incompatibilite = factory.creerIncompatibilite();
    }

    public void creerIncompatibilite(Groupe g1, Groupe g2) throws ExceptionMetier {
        incompatibilite = factory.creerIncompatibilite(g1, g2);
    }

    public ArrayList<ElementListe> creerListeIncompatibilite() throws ExceptionMetier {
        return factory.creerListeIncompatibilite();
    }

    public ArrayList<ElementListe> creerListeIncompatibiliteGroupe(int idGroupe) throws ExceptionMetier {
                return factory.creerListeIncompatibiliteGroupe(idGroupe);

    }

     public void ajouterIncompatibilite() throws ExceptionMetier {
        if (incompatibilite != null) {
            incompatibilite.insert();
        }
    }


    public void supprimerIncompatibilite() throws ExceptionMetier {
        if (incompatibilite != null) {
            incompatibilite.delete();
        }
    }
}
